package com.akjava.gwt.lib.client.experimental; import java.util.List; import com.akjava.gwt.html5.client.file.File; import com.akjava.gwt.html5.client.file.ui.DropDockDataUrlRootPanel; import com.akjava.gwt.html5.client.file.webkit.FileEntry; import com.akjava.gwt.lib.client.widget.PanelUtils; import com.google.common.base.Optional; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.user.cellview.client.CellList; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DeckLayoutPanel; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.VerticalPanel; public abstract class CellBaseEntryPoint<T> implements EntryPoint{ protected DeckLayoutPanel rootDeck; protected PreviewControler<T> previewControler; @Override public void onModuleLoad() { rootDeck = new DeckLayoutPanel(); RootLayoutPanel.get().add(rootDeck); initialize(); previewControler=createPreviewControler(); DockLayoutPanel mainRoot=new DropDockDataUrlRootPanel() { @Override public void loadFile(String pareht, Optional<File> optional, String dataUrl) { //never called.onDropFiles overwrite but need implement } @Override public void onDropFiles(List<FileEntry> files){ doDropFiles(files); } }; rootDeck.add(mainRoot); VerticalPanel topPanel=new VerticalPanel(); topPanel.setSpacing(16); mainRoot.addNorth(topPanel, 48); topPanel.setSize("100%", "100%"); topPanel.getElement().getStyle().setBackgroundColor("#607d8b"); rootDeck.showWidget(0); HorizontalPanel panel=new HorizontalPanel(); panel.setWidth("100%"); topPanel.add(panel); Label appLabel=new Label(getAppName()+" Ver"+getAppVersion()); appLabel.getElement().getStyle().setColor("#fff"); panel.add(appLabel); HorizontalPanel rightPanel=new HorizontalPanel(); panel.add(rightPanel); rightPanel.setWidth("100%"); rightPanel.setHorizontalAlignment(HorizontalPanel.ALIGN_RIGHT); Anchor setting=new Anchor("Settings"); setting.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { showSettingWidget(); } }); rightPanel.add(setting); VerticalPanel mainPanel=PanelUtils.createScrolledVerticalPanel(mainRoot,99); mainPanel.setWidth("100%"); mainPanel.getElement().getStyle().setBackgroundColor("#e8e8e8"); mainPanel.setSpacing(16); mainPanel.add(createInputPanel()); mainPanel.add(createMainCell()); //create settings DockLayoutPanel settingPanel=new DockLayoutPanel(Unit.PX); rootDeck.add(settingPanel); VerticalPanel settingTopPanel=new VerticalPanel(); settingTopPanel.setSpacing(16); settingTopPanel.setSize("100%", "100%"); settingTopPanel.getElement().getStyle().setBackgroundColor("#607d8b"); settingPanel.addNorth(settingTopPanel, 48); Label settingTitleLabel=new Label(getAppName()+" >> "+"Settings"); settingTitleLabel.getElement().getStyle().setColor("#fff"); settingTopPanel.add(settingTitleLabel); DockLayoutPanel closePanel=new DockLayoutPanel(Unit.PX); settingPanel.add(closePanel); Button closeBt=new Button("Close",new ClickHandler() { @Override public void onClick(ClickEvent event) { onCloseSettings(); showMainWidget(); } }); closePanel.addNorth(closeBt, 48); ScrollPanel scroll=new ScrollPanel(); closePanel.add(scroll); scroll.add(createSettingMainPanel()); //create editor createEditor(rootDeck); createOtherWidget(); } public abstract void initialize(); public abstract void createOtherWidget(); /* * please add by yourself */ public abstract void createEditor(DeckLayoutPanel container); public abstract void onCloseSettings(); public abstract String getAppName(); public abstract String getAppVersion(); public abstract CellList<T> createMainCell(); public abstract Panel createInputPanel(); public abstract Panel createSettingMainPanel(); public void showMainWidget(){ rootDeck.showWidget(0); } public void showSettingWidget(){ rootDeck.showWidget(1); } public void showEditorgWidget(){ rootDeck.showWidget(2); } public abstract void doDropFiles(List<FileEntry> files); public abstract PreviewControler<T> createPreviewControler(); public static interface PreviewControler<T>{ public void show(); public void hide(); public void setData(T data); public void setPreviewHtml(SafeHtml html); } }